/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.deployment.manager.visualizar;

import br.com.deployment.entidade.humana.Pessoa;
import br.com.deployment.entidade.protocolo.Parcela;
import br.com.deployment.entidade.protocolo.Protocolo;
import br.com.deployment.entidade.protocolo.ProtocoloCampo;
import br.com.deployment.entidade.protocolo.ServicoProtocolo;
import br.com.deployment.entidade.selo.Selo;
import br.com.deployment.enums.FormasPagamento;
import br.com.deployment.servico.ParcelaServico;
import br.com.deployment.servico.PessoaServico;
import br.com.deployment.servico.ProtocoloServico;
import br.com.deployment.servico.SeloServico;
import br.com.deployment.utilitario.Msg;
import java.io.IOException;
import java.io.Serializable;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

/**
 *
 * @author roniere
 */
@ManagedBean
@SessionScoped
public class ManagerVisualizarProtocolo  implements Serializable{
    
    
    @EJB
    ProtocoloServico protocoloServico;
        
    @EJB
    PessoaServico pessoaServico;
    
    @EJB
    SeloServico seloServico;
    
    @EJB
    ParcelaServico parcelaServico;
    
    private Pessoa pessoa;
    private Protocolo protocolo;
    private Selo seloVer;
    private boolean parc;
    private BigDecimal recebido;
    private BigDecimal sumTotal;
    private BigDecimal troco;
    private BigDecimal entrada;
    private BigDecimal recebidoParcela;
    private int qtdParc;
    
    
    private Parcela parcela;
    
    private ServicoProtocolo spVisualizar;
    private List<ServicoProtocolo> listSP;
    private List<ProtocoloCampo> listPC;
    
    @PostConstruct
    public void init(){
        this.pessoa = new Pessoa();
        this.protocolo = new Protocolo();
        
        sumTotal = new BigDecimal("0");
        recebido = new BigDecimal("0");
        troco = new BigDecimal("0");
        recebidoParcela = new BigDecimal("0");
        
        entrada = new BigDecimal("0");
        parc = false;
    }

    
    public List<ProtocoloCampo> getListPC() {
        return listPC;
    }

    public BigDecimal getRecebidoParcela() {
        return recebidoParcela;
    }

    public void setRecebidoParcela(BigDecimal recebidoParcela) {
        this.recebidoParcela = recebidoParcela;
    }

    public void setListPC(List<ProtocoloCampo> listPC) {
        this.listPC = listPC;
    }

    public List<ServicoProtocolo> getListSP() {
        return listSP;
    }

    public void setListSP(List<ServicoProtocolo> listSP) {
        this.listSP = listSP;
    }

    public ServicoProtocolo getSpVisualizar() {
        return spVisualizar;
    }

    public void setSpVisualizar(ServicoProtocolo spVisualizar) {
        this.spVisualizar = spVisualizar;
    }
    
    
    
    public void ver(int id) throws IOException{
        System.err.println("Verrrrrrr");
        init();
        protocolo  = protocoloServico.find(id);
        protocolo.setServicoProtocolos(protocoloServico.servicoProtocolos(protocolo));
        System.err.println("protocolo: " + protocolo);
        protocolo.setParcelas(parcelaServico.getParcelas(protocolo.getId()));
        pessoa = pessoaServico.find(protocolo.getCliente().getId());
        
        for (Parcela p : protocolo.getParcelas()) {
            if(!p.isAtivo()){
                System.err.println("Parcelas...");
                recebidoParcela = recebidoParcela.add(p.getValorPago());
            }
        }
        System.err.println("REDIRECT...");
        FacesContext context = FacesContext.getCurrentInstance();
        context.getExternalContext().redirect("visualizarProtocolo.xhtml");
    }
    
    public void recontar(){
        recebidoParcela = new BigDecimal(BigInteger.ZERO);
         for (Parcela p : protocolo.getParcelas()) {
            if(!p.isAtivo()){
                recebidoParcela = recebidoParcela.add(p.getValorPago());
            }
        }
    }

     public int resgateId(String key){
        FacesContext context = FacesContext.getCurrentInstance();
        Map map = context.getExternalContext().getRequestParameterMap();
        String x = (String) map.get(key);
        int ds = Integer.parseInt(x);
        return ds;
    }
     
      public void showDialog(){
        spVisualizar = new ServicoProtocolo();
        int index = resgateId("paramShowProAtoVisu");
        spVisualizar = protocolo.getServicoProtocolos().get(index);
    }
      
    public int getQtdParc() {
        return qtdParc;
    }

    public void setQtdParc(int qtdParc) {
        this.qtdParc = qtdParc;
    }
    
    

    public boolean isParc() {
        return parc;
    }

    public void setParc(boolean parc) {
        this.parc = parc;
    }

    public BigDecimal getEntrada() {
        return entrada;
    }

    public void setEntrada(BigDecimal entrada) {
        this.entrada = entrada;
    }

    
    public BigDecimal getRecebido() {
        return recebido;
    }

    public void setRecebido(BigDecimal recebido) {
        this.recebido = recebido;
    }

    public BigDecimal getSumTotal() {
        return sumTotal;
    }

    public void setSumTotal(BigDecimal sumTotal) {
        this.sumTotal = sumTotal;
    }

    public BigDecimal getTroco() {
        return troco;
    }

    public void setTroco(BigDecimal troco) {
        this.troco = troco;
    }

    
    public Protocolo getProtocolo() {
        return protocolo;
    }

    public void setProtocolo(Protocolo protocolo) {
        this.protocolo = protocolo;
    }

    public Selo getSeloVer() {
        return seloVer;
    }

    public void setSeloVer(Selo seloVer) {
        this.seloVer = seloVer;
    }
    
    
    

    public Pessoa getPessoa() {
        return pessoa;
    }

    public void setPessoa(Pessoa pessoa) {
        this.pessoa = pessoa;
    }
    
     public void protocoloGetSelos(int id){
        seloVer = new Selo();
        seloVer = seloServico.find(id);
        System.err.println(id);
    }
    
     public void verificaPag(){
        this.parc = this.protocolo.getFormasPagamento() == FormasPagamento.PARC ? true : false;
        
    }
    
    public void valorParcela(Parcela p){
      parcela = p;
      sumTotal = parcela.getValorAPagar();
    }
     
     public void caixa(){
        if(recebido != null){
            if(!recebido.equals(BigDecimal.ZERO)){
                    troco = recebido.subtract(sumTotal);
            }
        }else{
            troco = BigDecimal.ZERO;
        }
       
    }
     
     public void pagarParcela(){
         
          BigDecimal aPagar = recebido.subtract(troco);
            
            if(aPagar.compareTo(new BigDecimal(BigInteger.ZERO)) == -1
                    || aPagar.compareTo(new BigDecimal(BigInteger.ZERO)) == 0){
                parcela.setValorPago(sumTotal);
            }else{
                parcela.setValorPago(aPagar);
            }
            
         parcela.setDataPag(new Date());
         parcela.setAtivo(false);
//         parcelaServico.atualizar(parcela);
         recontar();
         
     }
     
     public void atualizar(){
             
         for (Parcela parcela1 : protocolo.getParcelas()) {
            parcelaServico.atualizar(parcela1);
         }
         protocoloServico.atualizar(protocolo);
         
         Msg.messagemInfo("Protocolo Atualizado com Sucesso !!");
         
     }
     
     public void relatorioProtocolo(){
         protocoloServico.relatorioProtocolo(protocolo.getId());
     }
     public void relatorioProtocoloRecibo(){
         protocoloServico.relatorioProtocoloRecibo(protocolo.getId());
     }
    
}
